import Vue from 'vue'
import Vuex from 'vuex'
import http from '../utils/request'
import Utils from '../utils'
import { Toast } from 'vant'
import wx from 'weixin-js-sdk'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    user: {
      chargingInfo: {}
    },
    isShowPopupShadow: false // home 页面点击搜索 弹出阴影
  },
  // ! 操作 state 一定要在 mutations
  mutations: {
    // ! state：状态  payload：载荷
    isShowPopupShadowChange (state, payload) {
      state.isShowPopupShadow = payload
    },
    setUser (state, payload) {
      state.user = payload
    }
  },
  getters: {
    getUser: state => state.user
  },
  // ! 异步操作一定要用 actions
  actions: {
    updateUserInfo ({ commit }) {
      http.get('/getUserInfo').then(res => {
        if (res.code === 200) {
          const user = res.data
          commit('setUser', user)
        }
      })
    },
    getScan () {
      if (Utils.isWeApp()) {
        http.get('/open/getWeSign?url=' + location.href).then(response => {
          if (response.code === 200) {
            // 生成签名
            // jsapi_ticket 后台获取
            // noncestr 随机字符串
            // timestamp 当前时间戳
            // url 当前url，不算hash值
            // 按照以上顺序以键值对的形式连接起来（所有属性值均为原始值），在通过sha1加密形成签名。
            wx.config({
              debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
              appId: sessionStorage.getItem('AppId'), // 必填，公众号的唯一标识
              timestamp: response.data.timestamp, // 必填，生成签名的时间戳
              nonceStr: response.data.nonceStr, // 必填，生成签名的随机串
              signature: response.data.signature, // 必填，签名
              jsApiList: ['scanQRCode'] // 必填，需要使用的JS接口列表
            })
            wx.ready((res) => {
              console.log('成功')
              wx.scanQRCode({
                needResult: 0, // 默认为0，扫描结果由微信处理，1则直接返回扫描结果，
                scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是一维码，默认二者都有
                success: (res) => {
                  // var result = res.resultStr // 当needResult 为 1 时，扫码返回的结果
                  console.log(res.resultStr)
                }
              })
              // config信息验证后会执行ready方法，所有接口调用都必须在config接口获得结果之后，config是一个客户端的异步操作，所以如果需要在页面加载时就调用相关接口，则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口，则可以直接调用，不需要放在ready函数中。
              // this.isWxConfig = true // 放开扫码按钮限制
            })
            wx.error((res) => {
              console.log('失败')
              // config信息验证失败会执行error函数，如签名过期导致验证失败，具体错误信息可以打开config的debug模式查    看，也可以在返回的res参数中查看，对于SPA可以在这里更新签名。
            })
          } else {
            Toast(response.msg)
          }
        })
      } else {
        // eslint-disable-next-line no-undef
        AlipayJSBridge.call('scan', {
          scanType: ['qrCode'],
          actionType: 'scanAndRoute'
        }, function (result) {
          console.log(JSON.stringify(result))
        })
      }
    }
  },
  modules: {
  }
})
